package com.changgou.footmark.task;

import com.changgou.entity.DateUtil;
import com.changgou.footmark.dao.FootmarkMapper;
import com.changgou.footmark.pojo.Footmark;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import tk.mybatis.mapper.entity.Example;

import java.util.Date;

/**
 * 过期（超过一个月）浏览记录定时清理任务类
 * @author Yolen
 * @date 2020/5/31
 */
@Component
public class ClearFootmarkTask {

    @Autowired
    private FootmarkMapper footmarkMapper;

    @Bean
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
        return new PropertySourcesPlaceholderConfigurer();
    }

    /**
     * 浏览记录定时清理任务
     * 每个月1号凌晨2点15分定时任务: 0 15 2 1 * ?
     * 测试用：每10秒执行一次：0/5 * * * * ?
     */
    @Scheduled(cron = "0 15 2 1 * ?")
//    @Scheduled(cron = "0/5 * * * * ?")    //测试使用
    public void clearTimeOutFootmark(){
        try {
            System.out.println("********************【浏览记录定时清理任务】：开始执行********************");
            // 1.获取当前日期及一个月前的日期
            String currentTime = DateUtil.parseDate2String(new Date(), "yyyy-MM-dd");
            String subMonth = DateUtil.subMonth(currentTime);
            // 2.判断是否存在超时记录
            Example example = new Example(Footmark.class);
            Example.Criteria criteria = example.createCriteria();
            criteria.andLessThan("browseDate", subMonth);
            int timeOutCount = footmarkMapper.selectCountByExample(example);
            // 2.1 如果不存在，结束本次任务
            if (timeOutCount <= 0) {
                System.out.println("********************【浏览记录定时清理任务】：无超时浏览记录数据********************");
                return;
            }
            // 2.2 若存在，则调用持久层删除超时浏览记录
            System.out.println("********************【浏览记录定时清理任务】：查询浏览记录超时数据有[" + timeOutCount + "]条，即将清除...********************");
            footmarkMapper.deleteByExample(example);
            System.out.println("********************【浏览记录定时清理任务】：浏览记录数据清理完毕********************");
        } catch (Exception e) {
            e.printStackTrace();
        }


    }
}
